{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example Q2 - Variational quantum eigensolver"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This example demonstrates the principle of a variational quantum eigensolver (VQE), originally proposed in [Peruzzo et al. (2014)](https://www.nature.com/articles/ncomms5213). To showcase the hybrid computational capabilities of PennyLane, we first train a quantum circuit to minimize the squared energy expectation for a Hamiltonian $H$, \n",
    "\n",
    "$$ \\langle \\psi_v | H | \\psi_v \\rangle^2  =( 0.1 \\langle \\psi_{v} | X_2 | \\psi_v \\rangle + 0.5 \\langle \\psi_v | Y_2 | \\psi_v \\rangle )^2.  $$\n",
    "\n",
    "Here, $| \\psi_v \\rangle $ is the state obtained after applying a quantum circuit to an initial state $|0\\rangle$. The quantum circuit depends on trainable variables $v = \\{v_1, v_2\\}$, and $X_2$, $Y_2$ denote the Pauli-X and Pauli-Y operator acting on the second qubit (*Note: We apply the square to make the optimization landscapes more interesting, but in common applications the cost is directly the energy expectation value*).\n",
    "\n",
    "After doing this, we will then turn things around and use a fixed quantum circuit to prepare a state $| \\psi \\rangle $, but train the coefficients of the Hamiltonian to minimize\n",
    "\n",
    "$$ \\langle \\psi | H | \\psi \\rangle^2  = (v_1 \\langle \\psi | X_2 | \\psi \\rangle + v_2 \\langle \\psi | Y_2 | \\psi \\rangle )^2 . $$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Optimizing the quantum circuit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Imports"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We begin by importing PennyLane, the PennyLane-wrapped version of NumPy, and the GradientDescentOptimizer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pennylane as qml\n",
    "from pennylane import numpy as np\n",
    "from pennylane.optimize import GradientDescentOptimizer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We use the default qubit simulator as a device."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dev = qml.device('default.qubit', wires=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Quantum nodes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The quantum circuit of the variational eigensolver is an ansatz that defines a manifold of possible quantum states. We use a Hadamard, two rotations and a CNOT gate to construct our circuit. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ansatz(var):\n",
    "\n",
    "    qml.Rot(0.3, 1.8, 5.4, wires=1)\n",
    "    qml.RX(var[0], wires=0)\n",
    "    qml.RY(var[1], wires=1)\n",
    "    qml.CNOT(wires=[0, 1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A variational eigensolver requires us to evaluate expectations of different Pauli operators. In this example, the Hamiltonian is expressed by only two single-qubit Pauli operators, namely the X and Y operator applied to the first qubit. \n",
    "\n",
    "Since these operators will be measured on the same wire, we will need to create two quantum nodes (one for each operator whose expectation value we measure), but we can reuse the same device. \n",
    "\n",
    "*NOTE: If the Pauli observables were evaluated on different wires, we could use one quantum node and return a tuple of expectations in only one quantum node: `return qml.expectation.PauliX(0), qml.expectation.PauliY(1)`*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "@qml.qnode(dev)\n",
    "def circuit_X(var):\n",
    "    ansatz(var)\n",
    "    return qml.expval.PauliX(1)\n",
    "\n",
    "\n",
    "@qml.qnode(dev)\n",
    "def circuit_Y(var):\n",
    "    ansatz(var)\n",
    "    return qml.expval.PauliY(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Objective"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The cost function to be optimized in VQE is simply a linear combination of the expectations, which defines the expectation of the Hamiltonian we are interested in. In our case, we square this cost function to provide a more interesting landscape with the same minima."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cost(var):\n",
    "\n",
    "    expX = circuit_X(var)\n",
    "    expY = circuit_Y(var)\n",
    "\n",
    "    return (0.1 * expX + 0.5 * expY) ** 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This cost defines the following landscape:\n",
    "\n",
    "*Note: To run the following cell you need the matplotlib library.*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAADuCAYAAAAOR30qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXl4ZGWZ/n/XltSetdPpztLpdNJbek+nuxHlx4Agi6IoLrMICrgBKnx1BHUGBx23r7grMzqjoo4KAg74haYBQVl7h6b37PveWWrf6/z+KN6Tc06d5T3nVKUrxflcV65OV6pOVVJV97nrfp/3eUwMw8DAwMDA4PxjPt8PwMDAwMAggyHIBgYGBgWCIcgGBgYGBYIhyAYGBgYFgiHIBgYGBgWCIcgGBgYGBYIhyAYGBgYFgiHIBgYGBgWCIcgGBgYGBYJV5fWNbX0GBgYG6jHRXMlwyAYGBgYFgiHIBgYGBgWCIcgGBgYGBYIhyAYGBgYFgiHIBgYGBgWCIcgGBgYGBYIhyAYGBgYFgiHIBgYGBgWCIcgGBgYGBYIhyAYGBgYFgiHIBgYGBgWCIcgGBgYGBYLa5kIGBrIwDINUKgUAsFgsMJmoeqoYGBjAEGSDHJFOp5FKpZBMJhGLxdjLTSYTLBYL+2U2m2E2m2EymQyxNjAQYAiygS7S6TSSySTrik0mEyu4DJPp1kqEWni7SCSCiooKWK1WQ6gNDGAIsoEGGIZBOp1GOByG1Zp5CREhJSJMLuP+yyUej2NgYAAulwvxeJx3G7PZDIvFYgi1wZsOQ5ANqCFCTGKJ119/HR0dHZqEktzGYrGI3kcqleIJNbmuMP4whNqgmDAE2UARrhCn02nWxTIMo1kMhW6ae7nYMblCLbxfrkALc2oDg6WEIcgGkpCKiWQyyYog+bJYLKKCSouUIMtdn1aoE4kEZmdnsWLFCskFRQODQsQQZIMsxITYbOaXrJtMJqTTac33oVaQ5Y4jFNh4PI6ZmRnU1tYikUggHo/zrkOctCHUBoWGIcgGLAzDsBUTUkJMkBOvQhE2scdOTgLJZBKJRCLr+oZQG5xPDEE2YIWYlKbJCXGuyJVD1nK/3H8JckJNIhpu1Yex6cUgHxiC/CaGZK99fX1obGxc1IqF8yXIUigJNTfC6enpQUtLi6yjNsTaQAuGIL8JEW7mGBsbQ1NTU86OT1t9UUiCLIWYUAcCAbZcT2zTC/mEYbVaDaE2UIUhyG8SGIYBwzBIJBLsYtz5FIilLkxKjjqdTvO2kJPrGpteDOQwBLnIEdYQA4sjxEouudAii1whtzvR2PRioIQhyEWK2GaOxXiDi22hNshAU0s9Pz8Pv9+PxsZGABDNqI3Kj+LFEOQiQ24zRyFRaI/nfCJ8ftLpNLvxRmp3olGiV5wYglwk0GzmMCh80uk0+7zJOWqyHmBseikuDEFe4pAa4mAwiOHhYaxdu1a1EJNdd4aAn39oKlTkhBowNr0sZQxBXqIIN3MAQDgc1vQGI42CtD4O402dO/ScGGk2vYyMjCCVSmHlypUAwAqzWImeweJjCPISgzuZA1hwSxaLRXNvCeKQha0waW4nFOR0Oo2ZmRlYLBa43W62X/KbnRcqd2ZddtHskazL8nGC4wo1wzCsWxbb9CK8jrHpZXEx3i1LBLHJHMLskPxMLWazWZOYc6sp0uk0xsbGMDg4CK/XyzawT6VSKC0thcvl4n2pFf+lyMhH3ou+Pw9J/lxMpNeceCyv0VEqlYLNZgNAvzuRi7HpJb8YglzAqNnMoVVU9dzWZDIhlUphbGwMQ0NDWLZsGTo6OtjHTgQ7FoshFAohFAphdHQUoVCIHeHU29vLirTT6SwaoX6laQ8AwOrNfosl/cmsywBg+VsqWXeaL2g+CRmbXs4fhiAXIFo2cyy2IKdSKcRiMRw6dAi1tbXYtWsX67wSiQT75jWZTLDb7bDb7aiqqmJvzzAMDh06hLKyMoRCIczOziIcDiOdTsPhcPDctNPpXFILjkSMpSAiXdtRhUSEv/imJTpSQz4yamDhNev3+zE8PIz169ezPzM2vdBjCHIBoWczh54Xt5pFvWQyieHhYYyOjgIAtm/fDpfLpfo+iaOqrq5GdXU1eznDMIhEIqyjPnfuHMLhMBiGgcPhgNvtZoXa4XAUnFCPf/z9um4fueVmlP7itzl6NNnkq5qGuyGIxBkAf9MLgXx6Mja9ZGMIcgHArSE+ceIEWlpa4HA4FrXzmpJDTiaTGBoawtjYGOrq6rBnzx4cP348527OZDLB6XTC6XRi2bJl7OXpdBrRaBShUAjBYBBTU1OIRCIAwDpqItb5ROnE1f/0MNVxajuqJH+W78gi3xk19zWhZtIL4c1comcI8nlEbDMHeaEu5otPLrJIJBIYHBzE5OQk6urqcMEFF7BvOBohz+VjlBJq4qgDgQAmJiYQDocRi8Vw6tQpnlDb7fa8/l1Pvf1SqutxxdjmsGXFFrMf/Ucse/zpnD42glAw83F8GsE3Nr2IYwjyeUBuMofFYtFcLaEVMUGOx+MYHBzE1NQUGhoasGfPnqw3ciH0rDCbzWyEUVNTAwCIRCLo7u7GqlWrEAwG4fP5MDY2hmg0ygo7uY3b7UZpaSn1m1qqLI2IcVmLuEP39YQAyDvjxWAxHLKeUkeaTS8nTpxAY2MjnE4ngOISakOQFxGayRznW5BjsRgGBgZw7tw5rFq1ChdccIHkG1jPhpJ8YzKZ4Ha74Xa7eZenUimEw2GEQiH4fD6Mjo4iFovxhJ0IdUlJiWilgZY3elmLC8vWLUNwKpD1MzGXnC8WQ5DzlVGTf5PJJEpKSni11FK7E3/4wx/irrvuYhecCx1DkBcBqc0cYugVZC2CYTabEYvFcObMGczNzWHVqlVobW1VfGMtZmSRKywWCzweDzweD+/yVCrFLiTOzc1hZGQEsVgMFouFJ9QOhyPrJEQbVaih852XY10eYovFEOR8i18ymWRduFKJ3iOPPIIvf/nLeX08ucQQ5DyitJlDDDlBPnbxRQAAmzPzgm/b+yzv58SxqhHkSCSCc+fOIZFIoLW1FevXr6e+fSFEFrnCYrHA6/XC6/XyLk8mk6xQz8zMIBAIIBgM4tVXX4XL5ULy1luojr9s3TLlKy0C+XKw3OPb7fa8HR+gO6lwX5tLKbowBDnH6J3MIZbnEiEmJMIJ2Jw2nLpqwZm17X2W3a1H84YLh8Po6+tDIBBgF8pWrFhB9Ri5j1VMkJfSG0AJq9WKsrIylJWVAcgscp48eRKbNm3KbHRReTx3jYc6tsiHS17sKot8oeY1tpRej4Yg5whuDXFvby/Ky8tRWVmp+sXAdchcwVVi6MZrYb7ly4oRQigUQl9fH0KhEJqbm9HW1obBwUFNTncpRhZ6IX8nm82G0eveR3WbQnHHAApiJ+BikUwmC+ax0GIIsk7ENnOQ/2s5M1ssFiQSCUUxJi6ZEJjwo+a+r2MSQOMv/zfr+sFgEL29vYhGo1izZg2qqqrYx5eLXhZaWYrd4tQ8XjExVuOS80E+/975FkE1rzefz8d+slkqGIKsEbnJHFarVfPCnMViwfzHruddZnPakAjTv1GHbryWFeVAIIDe3l4kEgk0NzeLunatjYnkBFnN5OmlJMjk8U588oOoaqnm/Wym51zO76/znZdj5R8eWTJ9Pgpp67ff70d5eXneHks+MARZJTSTOaxWa1aXLFpmbvxH6uuKuWRPbWZRaujGa3Hutn9FOp3GmjVrUFFRIXkcs9ms6fHq6Z8BLK1sjyB3AhEKtNmSm99veHiY7fNht9t5m10Krc9HvjNkboWFEvPz84ZDLlbkNnMIsVgsWd2waJCLKdS6ZABY8/jPUHb3zxSvpzUL1htZLMUqDYZhUHPf13UfR01sYfnC7dj5+NNgGIa3fVzY54Mr1Oerz0chCbIRWRQhNJs5hFitVoTDYdX35an1IjDhV3UbOZfsG5gCvvoJRVE+3xlyMVLWlNk1GBieztkxTSYTHA4HHA6HZEMmpT4f+f57L8bWbDWCbEQWRYKazRxCtGzuGLrxWgDyoqzFJQOAT0GUtQrymzGy8N3xkZwdK1eLe3INmbhCTfp8HD58mLd9nDjqXDwf+V4TULNouBQFuXDCpwIhnU4jHo/j1KlTiEajrCNW8yKzWCyaM+RcwBV038BU5t+vfkLy+rl2yG/GjSVciDsGAE9DbkreOt95uerbkO3gNTU1WL16NTZu3AiPx4P29nasWrUKDoeDXfQ9fPgwjhw5gtOnT2NwcBDnzp1DJBIpuOdHbYYst3ZSiBgOGeKbOQKBgOaua2odMnHHBLXRhTC2UIvWnhR6e1ksNUGe+OQHz9t9t918NfSe4kmFgtlspurzwW3IJBzBpaYhUy5RI8hGlcUSQ24yh55KCTVlb0IxVoI2thBmyWVNNZLRhZ5FPeHtGIbBxMQEIpEIPB4PXC4XSkpKJG+/VPB96Saq63HdMcHTsEwyS1aKLdpuvlrdA5VBKd/V2+djsTJqNYJsLOotAUjpWiqVkpzMoUeQcxFZ5MslJ3/zNViv/1feZXoiC3I7IsT9/f0oLy+Hw+HA9PQ0BgYGkEgkYLPZ2IUlbiP5peKQ3fU1iMwGF+3+1t1wNZgk/8RrffSHSL7ns5qPqXXbNG2fj8HBQUQiEbbPB/dL6qSslmQySd0rYylmyG8qQZbbzCFET9c1Woes1h0T9Ljk0MAIXAJR1rOol0gkeEK8Y8cO2Gw2JBIJ3ps/Ho8jGAzyBp2GQiGcOXMGXq/3vJdryZG674uYPt6Xt+MLXfK6G3Lnirnkuo+FXJ+PcDiMYDDIOylbrVbeCC6Xy6W6M5zasjcjQy5AaDZzCNHjkM9Xjwc1WTLXKWsRZIZh4Pf7MTExgZqaGmzfvp11LmIno5KSElRWVqKyspK97Pjx42hoaEAymcwq1+L2JZbqTbyYVK6rx2zniOx1xOIKglxswSVfYgwsXmMhm83GE2pCIpFgT8qTk5MIhUJIJpO8T0/kS0p0DUFewmipISboFWQlfP/2MZQ1VsM3JL3dNtclcDyX3FTPXq5GkBmGwfT0NHp7e2Gz2VBbW8ubMKwGMpHa4XDwyrW4i0vczNJqtfIiDy0OSy2p+76IVCwOICPKYigJNS1CMTZZbVmxhR4Wo/WmXEZts9lQUVGRJZLxeJwtzRsfH0coFEIqlUJJSUnW862mzjkUCuV9xmKuKUpBZhgGwWAQsVgMLpdL08hxPYJ8PpHbKCKEuGSaageGYXDu3Dn09vbC7XZj27ZtCAQC8PuzTxh6y96kFpcSiQT7xuU6rNLSUt4bN5eiY29sQKi7V/Y6levqWdGWQ84lr7vt74GAuk1Basl3nwmtm0JKSkpQUlLCE2qGYVihJjEXiUESiQS7YOx2u0X7fJDXVaHFX0oUlSBzN3PMz89jbm4O69at03Qsq9WqafszDb5/+xj7/fl2ycnffA3mv79L0iELhXjLli3sLLNgMKh7Y4iaRT2bzYby8nLeQg154waDQQSDQczOziIQCCAWi+HkyZNZ24nVnJhT930RcQqhBQBXUz1CA7lxynLoWdhbSr2QTSYTSktLUVpayou5Dh8+jHXr1rEbXsT6fESjUQSDwSU5V68oBFlsMofNZtM1CikXDlm4a4lMcF7s7rhyLhkArC8/iLS9hXcZwzCYmZlBb28vnE4nT4gJhbB1mvvGrarKDBAlQ05Xr17Nm0YdiUTYmlpuxYdUBQCNOwYA+wrp7FiImEuu+8A7qW+vh6UkyHKQXYnk+QbA6/PR3d2NX/7ylxgcHMSOHTvQ3NyMj370o7j6aul8ft++ffjsZz+LVCqFm2++GXfddRfv5y+88AJuv/12HD9+HA888ACuu+469mdDQ0O4+eabMTw8DJPJhL1796KpqUnT77akBZm4I7HJHGSlXyt6BZlUaVitVt4E503P3J91XT0umbD5Y1fw/m/iZKsj+17h/UzoklND/Ui3NLM/J0Jst9uxadMmyRwuF82F8oXJZMqaRg0s1NQGg0G2VIuU5fGE+nffgq2xIW+Pj5Zc5sjFIshicPt8XHHFFdi9ezc+/OEP47nnnkN/f7/sQmAqlcKtt96KZ555BvX19ejo6MA111yDjRs3stdpbGzE/fffj3vvvTfr9tdffz2+/OUv47LLLmOduVaWtCBzBxwK39y5ElStWK1WRCIRjI2N8SY4B0QEWQ9bbnkXGIUTT/0Vb4HJW47hP+6VvM4F8T7Mzq5HT08PSktLsXHjxqydXEJy0ctiseuQpWpqhQtLmyndMRctsQXPHXu8ec2Ri1mQhczPz6O8vBwWiwUtLS2y1z106BBaWlrQ3JwxJR/60Ifw2GOP8QSZOF7h3+/06dNIJpO47LLLAEDxPaPE0kq8RZDKic6nQyYfnV5//XW43W5ccMEFqK+vR0Cmn0RZY7XkzwCIRg4bPnKFyDXFYfzzaPjAVVmXEwFJDfWj4vhebNy4EVu3bqV6YRVT+02yqNTQ0IDW535NfTs1cQWB9LfQGlVYH/2hptud7yoLvaidFkK7KWR0dBQNDQufhurr6zE6SjctsaurC+Xl5Xjve9+L7du345//+Z91GbklL8hS6HVvWgQ5Eong9OnTePXVV1FaWorNmzejrq4uL28CJTGWcs0NH7hKVJgJriOPUj+GXPSyKERos2MxuOWEhUahVlnQorbTG+22aT0NspLJJF588UXce++9OHz4MPr6+nD//fdT3VaMohVkvW92NYIcDodx8uRJHDt2DJWVlbjgggvg9XpVnxBoXbJQjE0aanG9u3ay33NdMgDETr1AdQy5DTC0f/9CcciE1H1fpL6uFndMUOOOTdbc1Fov9chCbR8LWodcX1+P4eFh9v8jIyNYuXIl9W23b9+O5uZmWK1WvOc978Grr75KdVsxlrwg58tl0Rw3FArhxIkTOH78OGpqarBnzx7U1tbCZDJl9bPglrrpQU1MIYTxz/P+736HuFMumR6iEuViiiwI9hws5NG45HSFhJh7pKth9LIYgpzP4+drWkhHRwe6u7vR39+PeDyOBx54ANdccw31befm5jA9namcee6553jZs1qWvCArkY8tzMFgEK+//jpOnjyJFStWYPfu3aipqeGJuNZFQSWXnEvMc1OsKAtdMqDslIut/SZxx0wqBWdzE/uVa9xXvUv3MbTkyFxBHvj7azDw93SiQ4saB6uFfPVCtlqt+MlPfoJ3vOMd2LBhAz7wgQ+gra0Nd999N/785z8DyNQ/19fX46GHHsInPvEJtLW1Aci8z++9915ceuml2Lx5MxiGwcc+pt18LekqC0DeydpsNiSTyZx1mqKZ4EzgCnLyN1+Dq7kRob4hXfdPsl+h0wUysYUwN2YSCao4w/2OqxB8il+BUTI9hPiyRsROvYDStotEbycXWSy1adKAtDsWE+V0RP2IrvNNKpXC/KeuB/fVM3rj+3jXqfvlI7qOn2+HTBuJ+P1+rF27lvrYV111Fa66iv+J8atf/Sr7fUdHB0ZGxCtoLrvsMhw/fpz6vuRY8oIsB8mBtQoyERwixDQTnIX3rQWxumS5hbhcQJwy03kcqaF+WBpXsz87N9iF6lXZL265iSE0YlxIDnluYgQ1yLjjXCBVAqfVHYvVIx86dAilpaW8TS5SU6hHb3wfHIKxUDZH9sna98UbUfbNX2p6jPl2yGrn6S21xkJAEQiykkPWU/rGMAyOHj0Ks9mMNWvWqOqtarFYEI/HkfzN19jLcuGS9cL452HyLvwe5rkpyTyTuGRPcALnBpElysUUWdQc+TP1dU3LlgOcaEcr6YoamOemsn9AWY/c0dGBWCzGbhufmZlhh+uSmXlutxuxL2SXW4qJsXt5JnPVKsqFliEvtV7IQJFnyFpd6uzsLA4fPoxYLIZVq1ahvb1d9ZOrZmqIGNwsWeiOuYKqhNKmESlIllwynTmBZES5i/84KNuMdo/H0T0u3hOiUARZLdxPEFIIF/dykR1zsT32I9jtdlRXV6OpqQltbW3o6Ojgzczz+Xyaju374o2qb7MYZW/F7pCLWpBJhkwD6d1w6NAhDA0NYf369aiqqoLD4dB031JTQ1zNjZqOR4OW8jchsT3yVRznBrtYYZZzuAzDyAoxuX0hYHv8PgC5iyvON2Rm3vLly2H/+hcAgDfFWs4dc1ErygzDFFSGvNTGNwFFIMhyb2qr1aoYWZD+vocOHcLo6Cg2btyIbdu2wePx6B7j1Hr4YU235ZKP7FhsUZBgnxtjRVnMJRMGRqYwMjErKsgMw6B3MvvvJhTnQoosaDEtW85+r8YlS7ljyfI3sftWWY8sXLCTQkyMAcBVtwzJn9yJqakphEKh8zJ0gYuaDDkQCGRtj18KLPkMWQ45QWYYBlNTU+jv74fb7cbmzZuzupnpFWQpaLPkuk98BBDLGHOMWI5MRNk51il6G3dqHkFLOWrrmzEwMoVImj/nzGwC0kz2+b57PI7WFZlF1kIQ5MVwx5p27+nsa8EVYyV3rEQoFCqIaS5qIguGYQqmr4YalrwgKy3qkUUOAsMwmJycRH9/P7xeL7Zu3SoZS+gRZPufvq/pdrSYvOU5L3+Tg7vAF3DXZv3cYY5mibIUR44cgcvlQjweB8MwbLe1QofrjgmWxtW82m0xIhdk2j46fWM5f0xi/ZGlxFgMOXdMaHjiP2G97dsA5Ke5xGIxjI6OsmKd64oLWkE+3yd5PSx5QZaDK6gMw2B8fBwDAwOoqKjgzYCTu72ehTk5lFyy+8rF6ZErhn1uDNGKzNbR8Mp1ii6ZIBRlsykt6pLL6rZguSuKwcFB+Hw+zM3NsZM/iOtyu915H3hK3HF65SqYhvM3xHSxcS3zIDQdyLpcizsmJH9yJ6y3fVtymkssFsOrr77KGp6+vj7RaS56JrrQZsjcSfJLjaIQZKmPvjabDfF4HCMjIxgaGkJlZSXa29tRWlpKdVyLxaKrbC4XSJZG6URN+dtYy8VY2fM3UZcsFGUhUqI8GbKjrKwMJSUlqK2tBcMwvBKu6elpRCIRmEwmOJ1O3sieXG30IZjSyiddMXdMkHPJxB3LoeY5VuqPPH/nR9jvtSzkAXx3TIvFYkFpaSnq6xfiGfKckrams7OzCIVCYBiGV5ZHO82FNkMOBoNZJ4ylQlEIshjpdBpTU1OYnp6Gw+HAzp07Vb+RSU9jtTB//S3V9aRcMq07lootRB+TztiCiLISaqIL7omUDDwlZVwE8hFZ2FC+pKSE56alNkRIQTaCpFeuyghy3arsK40OUh8vL2jMkcXcsRAtYmx7/D4k3nmL6M/ESt64zyl3ukc6nWZHMKmd5kI1QNjnW5ILekCRCDL3jZ1KpTAyMoKRkRFUV1fD7Xar2kLJRdeiXkMTUsMDmm6rF7EcWS3hn/8Io0cWBGnZ//weYy0XAwCqfX05cclR63K4MSP7OMQ+Igvn6Ak3RNjtdsTjccRiMckFp5ojf14QYym4Ih2Pyj9Oiiw5XLYyLzkyQY071oqUKKupQSbCq3aaSzweh8/ng8vlknXKahoLFRpFIchA5skcHh7G6OgoamtrsXv3blgsFuzfv1/zMbUIMq07JtBUXBRCbDH9T/+w8P0b/2746b9TL/BJibKWBRixOXpAxnmFw2HMzs4iHo/jzJkziMfjsNlsWW7aslLEEUuQKKthS//UQBNX5IKeiRhaajMxXL7csaNJ/u+Vi00hStNcpqenMT4+jlAohFQqxQ41Fa45kGkhS5ElX4cMZDr+79+/HwzDYPfu3VizZg2sVuui9kQWw9LQpPo253MxjzD7UKZ+um7nKtTtlH4jnrn1XzByw80AMi6Zi8Ms7ygJIVPuutuRDRHLli2D2+3Gtm3bsGvXLrS1taGqqgqJRALDw8MoeX0fALrsWA00dclSqKlHJpzd80mc3fNJAIvjjtljvrEYyiWfu/RKSkpQVlaG0tJSrF+/Hu3t7ejo6EBrayvKysoQiUTQ39+Po0eP4pZbbsG3v/1tnD17Fnv37sXw8LDiSX/fvn1Yt24dWlpa8K1vfSvr5y+88AJ27NgBq9WKhx9e2Ftw7NgxXHDBBWhra8OWLVvw4IMP6v5di0KQKyoqcMEFF2D16tU5LbXJxeRpGvTs3pPaRi2WF2uNMeREGYCkKAsxm8Q3Fsjt5ssFJSUlqKysRGNjo+petYmyjFDGl6l7jnLmjkX6I5/efQsrxADg+FLm08v5csfA4m+bJkNNybbxTZs2oaOjA9/73vfwd3/3d1i+fDleeukl3HLLLRgclF4LIANOn3zySZw+fRp/+MMfcPr0ad51yIDTf/iHf+Bd7nQ68Zvf/AanTp3Cvn37cPvtt2N+nm5NR4qiiCxcLpdseZrWVpBqy97E4graLNnV3AjTui2SP1+s2IK4YyF1O1fxMmUhRJTL/2fh9moW+BYLy6tPAMi9O6ZFb458qj271+7yHS2YfLUHgDZ3rEWMhVlyofSxsNvtcDgcuOSSS3DzzTcrXl/PgFPu2tTKlStRU1OD6elpXXFJUQiynNiSvsRanLPZbM5bHbIY0fIVsM+PL9r9qaVu5yrEfCHeZee6+W1Crfd8Esmv/KfkMYRZ8qmJTAbcukLZ3S02xB0T4ssaFbNkS+NqjLRcgvLIhOz1tCAmxk0P381+T8S49ePXZS4QbLU+t/eZnD4e69HHkWzPRGyLMb6J9viBQIAVWCXEBpwePHhQ9eM7dOgQ4vE41qxZo/q2XIoispBDTwtONa5abjGPJkuO7X4H9X0JWYzub4TqzfwXenVrNe8LyIgyQS5LJmIMAI++lv+6UeKOCxW5HFlMjIW0fvw6STEGgMr3Z/e20BtVEArFIQPqWm/qGXBKGB8fx4c//GH86le/0r2RqSgEWanB0GLkwIWI2rrjc3+RH9nkacxsjhCKshinZurY7/vmMsJ7erIapyercXaqkifGi02sfIXm29JmyfOO7OoTrRzdemvWZWnGzLrjyVd70PThd8seI+3KZNFioqwFZkXm72A9+jiApSvIegacApmucldffTX+/d//HXv27KG+nRRFIchy6G1SDyiXZtEIvpxL5rrjqIxYaFmJp4F2cwkXJVHe+pN34dRMHSvMpyeVqykWwyVk1vWiAAAgAElEQVRHK+vZf8W+CMK4gpaRlksUrxMuo3/D09D00etUXb/y/e+Dq26ZZndMxJhgPfp4wQkybS9kPQNO4/E4rr32Wlx//fV4//vfT3UbJYpCkPPpkM1ms2TbwVQqhf7+flhe/IPm4+cKNbGFGLTumAuNKEthMS9uAxjaxTyhMIuhtuJCD0ebPyx6efMj/wIAcGzdlv1DijadpW8Rn5MIqIsqCIWUIatxyHoGnP7xj3/ECy+8gPvvvx/btm3Dtm3bcOzYMW2/4BuYVBbmF2QbJbJzS4z+/n6Ulpaq+hjC5ciRI9i8eTOv/wXZhDIyMoK6ujqsDA2iZHpY5igLCCsuxLJjuYU9uUoLKadLcuO+iz7FXpZk+C/u6h9lfyzmIibIhFQsjrku8QGQAPD6bf8PABCN80+cqXT2ifQ92/Uv7kUiEfT09GDz5s3sZYmB1zHvXIGKoPTjJIQdlbzez2KILe4J3bHcwp5cpQV5jrlibLcuvL5rfvAxuBsyz4dj6zZA2NtCIMgkruAS92Y+ATD7sqtq1LhjLrOtF+Vty/LAwACcTidvZ58UF198MQ4cOFBoHQSpgumicMhy6I0suKVvqVQKg4OD2L9/P9LpNPbs2YOVodz3O8h1bNF30ad4YixEjxiX1tfDuUbcKXsba+BtrMHb/nyT6M/FXHI+YovEwOsAQCXGBLEdiFxoXLJcjqwntuCJsU5MV/DjDq1iDACOWf1zBqVQE1mk0+m8DlvNJ0UhyPmMLMiw0qGhIRw4cADJZBJ79uxBc3Mz70mPLxMfIZ91PA279/TQuSd7wGU+qFib/THfP7Tg5i9++lOwl5y/D1jzTrqFvLCjkv1eSZS50GTHahBGFdFkpskOiSokUTlVBFgQZS1RBSFSRff61wpt6SrDMEu6H3JRCDIgLcp6HDLpSnX8+HHE43HetmwAiJ38m9aHm7m9jlI3MYQ5spwYW00Z16/XHROkXLIWcumS1UQVaslXliyVG3OhdcdycQUXoVMWouSOCeTTSK6h7YXM7R64FCkaQZZCi0NOp9MYGRlh+2O0tLSgpaVF8QytxiUrOWW9sQVXjIV5cb6ou1J6oSgVjePip7Njk8Ve3JOD644JNC75+CppMdNS/uaPiffrFnXHMr2R1SD3eyqJsdAd50OUaSOLcDgMl8uV8/tfLIpGkOUcMq0gc4U4Eolg165dVIsIXGhFeaz171QdVw20MUWu3LEc3NgCAK742yclrpl78umOCXpcsliO/LxTueTKvkriNaYhruAyvVO6KkYKqagi16JMK8jz8/NLtvUmUESCLAXN5Ol0Oo3R0VEcOHAA4XCY7SRls9kkHbbeuAIA5l25rUcFgNc7Pp3zY6pBySUD2aKcr8U9khuHHFW8LzHE3DFBzj2ede7S9yAp2fjYF9jvTeV0m2po4wouQlGWc8dKufG5qUnZn6shlUpR7YJTU/JWiLwpBFnKITMMg7GxMRw4cADBYBA7d+7E2rVreVMKtEQeSi6Z1h2rjS2OrZPOHsVii8oPfRCVH/qg6PVz4Y4JXJdsX5E57rVD2W0Oc8l6T6Z2vCSVPfGFRqBzCW1sIeWOuWLMc8d5jitoc2MxfM7MMdWK8qnRNE6Nitf9004LMRxyASD1ZJnN5qxVVzLwdP/+/fD7/Whvb8e6detERzyJdXzLhTs+3zRPvsx+LyXKWllxk/SJIdQ/DPuK5WAEo7GkXPKxY8fQ09ODiYkJhEIhyU06QuadK0TFWIxJt3JDGKUseTYh7bBpEIqxVI4s6Y51xhVcpne+S3VuzIWIMeHc1CTm5+cVjQ0R4rY67bK01AV5aRbraYQ7EbeiooJq4KnFYsl6IQU8K+EJyLdQjC9rEN0sInTH866VKA/pH+sj545pIKI8+8CDutxxWmISh39oCt5Gvqu/duhb+N/Gu2SPt2HDhqxRTSaTCS6XCx6Ph50Wwc0Xg4EAgmkPKqF+HqIachFXKLXjlHTHCmiJK7h0112K1tFnRX+mRowJ87ESzMfimBp8FXa7nTfBpX9OvkWrmva5Sz2yKBpBlnvCuEJcVlaGHTt2wG6n69MrjCzODXYBoBPlXEDTklMoxtFUCewWbU3fKz/0QSRe+Zum29IS6h+Ga3UDmEhEUZSfPF2N92znj2ois9cCgQAmJyfR29uLVCoFh8OReZO7XKhk6HpHk1mAAUsFPKk52esG3LWKO/i0QLuQx3PHi1BdISfKWqlZtQkAEE2VYjYJzM4DFhODFJN5/3rTo5ibywg12WlHmx8DhiAXNAzDYHp6GuFwGNPT09i+fTu1EBP0bCyRcsm5Qm3T+iRjYeuPZY97+XUwP529pVaNO15x04cx/gt+S1IxlwwsOGWLmRHdTi1EbPYawzCZScbBIHVUIRzMSiPKBDF3PJuoRKVtVvT6845a1T2Sue5YlhzGFUpoccdBRn6BlohxgyeIYNCC6elp9Pf3I5lMorS0FA6Hgz0Jk7l5ko/B5+P1N15qFI0gcx0yEeK+vj54PB54vV60trYqxhNicAWZuGOCWpcstZinJ7bQElVw82MhMXemK5uUKEshFlXUfSDTvHz0j49n/Yzrkk0OB/X9SGEymeB0OjHpN+U1qsi1S37Gl2nZWO6UPumriSoA+rhCyh3PYaEzH9cl50qMoylOX5g3xDiTG2efZGOxGGZmZjA/P4+BgQE2snI6nbzYg6z/LHWHXDSLesCCEB88eBBTU1PYsmUL2traYLfbNe/WU3LIAY986RptXbIcUtUWL5dJ98CNprIXKNWSvnxhw4PaygoudR94JyvOYpiqavDe0C8B8Bf3Xt4/h5f3z+Gf76P7hDI9NQWnOYSoxcX7EkPojgkBi3LbxsUodduz77O8/+cjrqClu+7SvIgxQWoRz2QysXlzWVkZ2tra0NHRge3bt6OhoQE2mw0zMzM4deoUDh48iHe961147bXXsH//fnZ3rRxKw01jsRg++MEPoqWlBbt378bAwAAAIJFI4IYbbsDmzZuxYcMGfPOb35S9HzUUjSBHIhEcOnQIExMT2LJlCzZt2gSn0wlAX+xAqjSE7lgN8WUNOLk6N43BhQRi+Z1Zl778Os0LeWkPX9yEohzqz8Q56ZFMg6Zrkw8AWBBi1Y9V4uUsFGgpMaZlPibt6OWqLYTlb8Qdy6HojiniCjWLeVx3zOV1tFMfQwqhGKcYE1VFhXDbtMVigcfjwYoVK9Da2ort27ejo6MDP/3pT+FyuRAKhfCd73wHH/nIRySPSTPc9Be/+AUqKirQ09ODO+64A3feeScA4KGHHkIsFsOJEydw9OhR/OxnP2PFWi9FI8h2ux2bNm3C5s2bWSEm0GwO0YOSS6ZB7SYROXcsh9w2ahJXCJnseI+m+xLDs0faXZpiYVaUhSi55Mmpc7I/56I0eFXOJZ+KrKO+H628hXkewIIYM3WrqW8rFleIoaZxEkFMlPXkxrTlbTSNhcxmMxobG5FIJPD5z38ev/3tb/H73/9e8vrc4aYlJSXscFMujz32GG644QYAwHXXXYdnn32WrfgIhUJIJpOIRCIoKSnJWdvRohFks9ksuYddzfZpMdbWKU+7kKPLvTi7uWhYOyXfiF4KKVGWcsdyuK5ccMpClwwA39+9T91jUyHGgXT+p5LQIHTH8+EFwUk/9Sfez8wh/8J/FjmuAICZ6MLfjCvKenJjNbXG+RjfJDbcdHR0VPI6VqsVZWVlmJmZwXXXXQeXy4UVK1agsbERn//851FZqa8OnVA0gny+5+rRuOTZpPyTJueSuTmy0B1LxRa5yJG5qHXKkSrxzQXmuSmeKHMxxcIAxEVZzCVrFWMtLpnrjrXGFkoI3TFWNklfeZHiCiGvo12XGL82oG7jBm2nN3JdsQ1eQmiGm0pd59ChQ7BYLBgbG0N/fz+++93voq+vj+rxKVE0ggzkpwXnwMgUdeYoJsq5dsdao4pcwRVlGnccatoq+TPXle+Ea/WCSyEu2RQLI+Gtxv+97Ai+ecVxyduPTc0jBavolxC9zjhXUcW8o1Y2Oy45e5iXGzMq2kjmI67gumMur81kt1ulFeN/ulDdVBhah6ymDzLNcFPudZLJJHw+HyorK/H73/8eV1xxBWw2G2pqanDhhRfiyJEj1PctR1EJshRaHfLAyEKNr96FIIKSSz5fSOXHflf2m3ey4z2KYizljrNYLy3YBKEoj03NY2xKfjArV5ylxFhPlrworGxatLiC1h0DwFwkI7KvzTSzwqwkxkf6y1U7YwJtc3oCza4+muGm11xzDX79618DAB5++GFccsklMJlMaGxsxHPPPQeGYRAKhXDgwAGsX79e3S8lwZtCkPVmyGrgumQt7lgutnjcpm66sBCt+bEYnSvfnrNjcUWZuGQys86SypQuffOK4/j8dfOYnDoHC+ify2DKhTQj/TKnEWUpd6wltniqS3qB7uIz9y78Z2WTvDvWGFfkwh0LeW2mGUdHluPoyMKW+2iqFK8OlrNfBLXuGKB3yNFoFA7Kmnaa4aY33XQTZmZm0NLSgu9973tsadytt96KYDCITZs2oaOjAx/96EexZcsW1b+X6OPKyVEKBJPJJPqxRUuVBdcdE4KWcrhT8s7sfBGI2eEpjWZdrmcbtRKdK9+OdWN/ybpc6I5DTVvhEvTHNc9N8TrWhXdfCefBJ2Xvryo4xHZnE6sv5kYVwVThNimf9ZtQ6dXemP/Qmo9knWQiCSv+P/8jOh+ZMsQdc/GHFx4LEeUY5yVH+kFpEWOAPkOen59XVe1w1VVX4aqrruJd9tWvfpX93m6346GHHsq6ndvtFr08F7wpHLLayEJMjAk00UXAs1LWHWuJLf4SulD1bWhRE1cIETpl6qhCgNM3hvDuKwGIu2Rhq0x7KgR7KsQ7hgVJhNMOUTHW6pJPTOeuZ7WcO37PIGdjwhsLecK44tCaj+DQmo9IHuN57/vwvFd9vbuauIIGMTHWA61DXuq79IAiE+R8LOqdD+Rii7nw+R9tPsvwW0DmMr4I776SFWYpgpZy9isJGwJpD/uVD3wRaTGQiy008YYYC+MKOSEW8rz3ffizLbulqt64Qskdy6HVHQP0GfJSb70JFJkgS2E2m6n76Mq5Y4KSSz4dWYu5qFP2Omqgdcdy5W+5zI/F6Fz5dtXumKYxEnHJ3uBCxzul2MhsEn+u1bpkve6YmyNTu2MRDjTy+5WIxRVi7IsoD0IodHecOU6aqtvb/Py84ZCXAoU4gbZQqy0INHGFkNfS0ttrxzZcrupYwbqN1Nd1mLOzc72inMuoQoxZv8hrkuOOSVxxoPHDkr8LDTSiLIR2MW8x3LEajMiiwMiF8DbV0xXSS7nk05G1uh8DsBBbiLnjXMYWUvmxFMK4QoiYKPsc0g3vuUg1atfikvUgJsZ6Ygs5d8wisgFE6IxpET7WfZG/07RVmotYXCEkH+5YDYYgLyFMJpNibJFOpzE4OCh7HS5K0UUuYws9bJnJroTINTORBVfFFWVaMRZjpOUS6uvmyiUvNsK4gnRVkxJj2rhCyBN92Z84xOIKre44JlHIo9cdq5kW4vf7DUEuJLRun06n0xgZGcH+/fuRTCZRX6stTlDrjpViCy2VFfnu/kbLa+n2LDEWiy2UcuSRlksw0nIJpspaAMi7ZDFRVsvhUenOdnIuWYoHD0vn6mxswXHH9tkRXqWEnrhCiJgo00Djjrnk0h3no49FIVNUgiyHmCCTYacHDhxAOBzGrl27sGbNGlitVt3RBUGPS571Sz89+ay2kMqPleIKIX2hehydpu9UBvBjC6kJG1xRVkKNSz45rn2BSyy2eOaYW/Y2Nzr+wBNj4o4dNu2bmMROGvOBBaPyRN9GPNG3UddiHq07bnO+gEOHDuH1119Hb28vpqamEA6HVW1xVtPHohgEueg2hkjBLX0jjex7e3tRXl5ONexUCa3Z8WyyEpXW7LE/T/coT0LWi9r8WApuXMGFnDSIKLcv68/J/XFxp+Z5J0WHOZpVMWE2pRVjCq4YR+Nm2EtyZ/PmfSmUl8mLSqSqgXXHDomdiFrjCjGeeK0KV2+f4V1GW+omB9cdb9++nZ36EQwG2RmIkUgEFouFN/HD7XaLCq+abdOGIC8hiEOenZ1Fd3c3nE4ntm3bJrvVsqm+hqoMrtDg7tpbjPyYlqPTqyFWuyDctSfFVFkLZhOVWB8+BG9wHH53pgOeUJRpSTNmmE1pVc7YF7GizKHsYKncsQAtmzqU4LpjIWKirITa7JhM/bDb7aiuXvg7J5NJdlDt+Pg4gsEg0uk0O5qJTBRPJBKqBLmi4jz3H9HJm0aQU6kUzp49C5fLhba2Nrjd8m8YAo0oH5xvg6dUeuPJXNSJCnuY+rFy3fGs34xK7+ItWauNK5TcsZDfOz+Ffwj/h+xjcPrGEC7LSHd5ZCJr0gYZobQS4gNk1bjkYyPVsIqYVy0ueT7mQHmp+nl+xB3Du5sXV6jNj2kz7jnfwqBbIsq5dsdKkP7C3I0cDMMgHA4jGAxifn4ew8PDCIcz7xuz2cw6aafTKVqXXAyLekUlyGKRRSAQQE9PD0KhEJYvX47W1tac3uepmbrM/cRssqIsh1RsocRc2IYKp/x9PmvPtOu8NMqfhpCruEINAcq6VS3QRBdCjo/mpxZczB1zY4uLWieBkczlJDdWcse5jCuEPPFaFfZsUO53IueOiRjvf3kcP/0CndkRYjKZ4HK54HK5sHx5ZkF4YmICoVAI5eXlCAaDmJmZYQedulwuuN1ulJaWwmq1Ih6Pq54qX2gU3aIeEeVwOIzjx4/jzJkzaGpqwurVq2GzaVsIk1rgI2JMA+3iXr6y42ft72a/ljKVtoUT11i6ASfD9Nk9cZzHRyt1ibGWagsuLSPP8f5/MLlb1/GkEIsruO6Y4PMl8NQBE546sHB9te4Y0CfGUqRSKdjtdlRVVWHVqlW8Qad1dXWwWCw4fvw4rrnmGgwPD+N973sf7rnnHhw9elT2uFoHnBKGhobgdrtx7733Zt1WD0XlkIFMC76enh4EAgG0tLSgqqoKJpMJiUSC/fiz1NASWwRidkST4gtJz9rfjUDAgis9/O3U+Y4r5JDLkcViCy5cUW7yLMRLPTOVaKlaEPCT49VIZusRkinkLLZ45IUS0DYcE05yXoy4QgkiyrsEbarl3PHLL9JXvaglmUyKul6LxQKv1wuv14uVK1fi0ksvxdve9jbce++9OHbsGGKxmOQxyYDTZ555BvX19ejo6MA111yDjRsXygK5A04feOAB3HnnnXjwwQfZn99xxx248kr5nitaKDpB7uvrQ3V1NTZu3MiLMPSOcRof7sWKhgX3KuaO9cYWRwbUL0jQxBZSPBm4KEuU8wU3rlCbI6tBuMtOuGBntUBUlHPBswflDzzvS+H/1P4RQLYYFxLBQAzPvbQgaJe8NfvE+8pL2SWJuXbHAH0dciwWQ2lpKZqbm9HcnD3NhAt3wCkAdsApV5Afe+wx/Nu//RuAzIDT2267jd2k8uijj6K5uVlyhqceik6Q29raRHfk6e34ZrVaUbe8AqOTc6qiCi5yi3vPvO5FxSI1qgpEFuzgk4GLAAAX1nbl5NiL0Y2u0jbLNu6ptEcwG81xxzUKaKstZI/hrMVZv/IYLC35sZq4QoknnuJXYiQTC8dRU1OshVQqRVWHrKbTm9iA04MHD0pehzvg1OFw4Nvf/jaeeeaZnMcVQBFmyFLodcgWiwXJZFJRjAOx/AiS3CaRXPDyhHgWqzauEIN2MU9u157UJhEhHjv/ORaLHMTiCSnXHI3TPXauO/b7xRfIuO5YOCS0EOIKIOOOtZAPdwzkpxeyngGnX/nKV3DHHXdQV2mppegEWa4nsh5BJoJ+9dbc91V+5vVM6CjmYGgQc6VS+bHkMQImPN69Do9352aYpxK/sHxK8TpSzYaEVNrVl5rlAiKESlEFIVLVwBPjw1PyH61ziVZ3HAnxTy5i7vjOD6mvEKKFVpD9fj/1tBA9A04PHjyIL3zhC2hqasIPfvADfOMb38BPfvITFb+RPEUnyFIQh6sVNQ5bziUXSsMhObSKMm1cEXnDhB1t1tbNDOBXWyhBuzCn1yXL8am2/QDAc8Yeu7KQ5yquoEHJHUtFFTS9irVCK8hqeiHrGXD64osvYmBgAAMDA7j99tvxpS99Cbfddpv6X0yCohNkKYestzUnV5Bz6ZKJOybIueRcxBbc/FiOx7vXLUpccbT5w9TCrDW2EEMsttCClDuWii0IuXLHWuMKLe5YjLv+fo6614QW1GTItIKsZ8Bpvim6Rb18YbVakUrlZnle7c49qmPqqLaYk3BUe49mqj6uap+jun8aIhImjIjy9rmnqI4j5Hws7j3/SmZ7sMtdIns9MXfMRU9+LIR2MU8tUu44mUzq7gMjB237TbV9LLQOOOVCqjByyZvGIRO0rgpzHTLNMWgW94TuOFeozY+VIMKsFiV3fGwwe2HktYp34HnnwsdHuRxZLrY4X4t7XLgumSvGh6ea8xZXaEUYV9C4459+wY10Op1Xh0xLMfSxAIpQkOWwWCyaXS4RZJ/PhyNHjqDBJL8TSAk5Mc5XbEEbVwCZmlkue49WYO/RClVxhRChO5Y7sXFFmQttbJFviDtW4sJNcUlnrBeauELrYh4XMXdMqipoI4V8Uwyd3oA3mSDrqUVOJBIYGRlBT08P1q9fjy1btijeRs4lBwL6aljPF0+/ksbTr/Ddplhcoadvhbc0o9zPO6+RFGYxlKotcrW4JxTjUFDaTW5h+CduYXac77iCBlp3LHYCzacg0w43BYqjsRBQhIKsdWqIFLFYDKdOncLw8DBcLhfa29vh8WRcotbFvb8e0XQzRebCNvzpaXUlYFL5sRi++YU3qpgwyyF0x6+8MIr9L9KVtR1O7JT8mZrYQgy1i3u0zphA3HGQUffJIl9xhR53TODWHOdTkNVOC6HdGFLIFJ0gy6GmFjmZTKK7uxtHjx5FVVUVNm3apLk5kRRyLllLbLH3qWlcdUl+CtalePqVNJ570Y/nXvQrXnf/S2PsF+G+3/qo7ucZ3x7NjzFXvPSKtPiLueRPXjoKYEGMiTumyY+V0BpXCJFzx3JRBaGQBLkYMuSiq7JQcshKkUU6ncbQ0BBGR0fR2NiIPXv2wGw2IxQKiYr51VsTeOJ1mWhC0N8iX+5YCT35sexxOW9oIsqxcLY4xeMLfzsmvfDR12Smd+hElDscA5LXEVZbeOxJBKILL3N7STprgU6sv4Ww4RAR40Q8BVsJ/d+SiPErfctR4eF/opCKKx56JoV0kv86jcf5VTmxSBxXXbmQTdPEFWrdMZcf/h87OyiYGyPkW5DVjG8yBLlAMZlMonmXnEMm8/X6+/tRW1uL3bt3887OuSh7y6cY731qWvVttMYVauGKMS3e0hj8sYVyqnJnEvPhzPNxeKIJHbUD7M+4vS3ygZwzloK4Y7VkxJgv3PE4/3UXi2Sei71PLixwvuWtK3jXyZU77j/Rg/93/2YwDMP2iCHvA5PJhFQqpbvGXwo145ui0ajs9J+lQlEKshRiDplhGJw7dw49PT0oLy9HR0cHSkqy60r19MKQ6wIXCCTh8Yg/DXO+FCokZrFxW3JqEeNcEBDZ2SXmjrmIueP/+J0fn/pHdSWAT3Vl5vS9Y636OX1iLlmMZAo4cDBbjKVccigYh8tdkhVVcN2xVFzx0DPaT/aRYBTP7lv4O1x6RfZgWSV3LFzI6z/Rg32/2wFgB+/ydDoNhmGQTCYxODgIs9mMdDrNirXJZGK/9O7go40siPnK14lhMXnTCTK3T6rP50NXVxdKS0uxdetWOJ3S25rNZrOkQ1aKLYDFiSre9y51U6HFUBNX0EDjjktK1L8MK70MZv0mPNW1OkuUlWILMcRii1f2z8CsIlLhwhVjMbhxxSN/kRZLKXcsx+MPn2a/v/Ay8W3wYtuke17rBgA8+T/bIBRigtlsxvz8PDo7O7F8+XLs3JlZcCUOWsxJMwwDi8XCCiatUKvJkAFDkAsWucgikUggFAqhu7sbqVQK69ato2pKoufJfn5/CID0ji6tLhmgc8dq8mMxxOKKXLljOYSxhRTELXesplsgVOKV/QvtJtNpRpUof/LSUVUVFQ/ti8FsXRAoYVyhRCQYlf35y890Ih7Nfq4SnA7z6TfORN/7cikCgQAOHDgAl8sFj8cDr9cLj8fDxn1kHNrmzZuzDAw37+WKMsMwWULNMAzMZjMrzmIiTZshqxXuQqY4fgtK0uk0pqenMT8/j9bWVlRV6XeUBCmXTMQ4Hzz88BCcHm25mZr8WCs07ni0exj/8okgAOUxRtwcWQwyy+6ybUHFY0nFFlwxloNmcW/vsWUo90Iyrnhon3wzH6E7piESVC57FBPjjCt+47J0GuFwGH6/H9PT0+jr60MkEkEikUBlZSUaGxthNptltzWLCS0RZK6TJi6am0uTL9pt2T6fj7rTW6FTlIIsfJEkk0n09/djcnISNpsNu3fv1ux4affWA/kV4+eeHsj5MfXEFVrc8Wj3MJ64f3Pm9rEYTo+rKysksYUQIszt6xd+H7nYQsuinRife/c0zx2Xe6U/mhMxVuOOhXGFkjsGkOWOhWLMFWICd8JzLBZDZ2cnSkpKsGrVKkSjUXYiNJnSQVy0x+OBw+FQJdIAX6DJv+l0Gn6/Hy6XC8lkUjaXLpZdekCRCjKBlLCNjIygsbERO3fuxIkTJzSLMVnAkPoYpZQlk0UfMbTGFuFABE6PIyf5sRi0cYUQKXdMxPjnXy4HsPAmyjghfTvVysssvJPKXw/xTzAhEfeYoHChUrGF0CVzxZi4YzEefzY/J2qhO5YSYzFXLIRhGIyOjmJ4eBgtLS1YtmwZAKCsrIydCM0wDGKxGAKBAAKBAMbHxxGJRGCz2ViB9nq9cDqdsrkx+Rl5XwUCAZw+fRrV1dWorKxky+0A8NZxzGYzTCZT0cCMpH0AACAASURBVGwKAYpYkMfGxtgStj179sBqtSKdTuvuiUxbd1ko7lgsP851XKHGHQNEjOmQK39TvK23hNfgx+Uukd3mDABmswnptPoGVJ+4RtytCuOKPz3pR8kbIs51x0KUFvOE7liNGMsJMQCEQiGcPXsWbrcbHR0dkvmsyWSC3W6H3W5nBTvz2OOsSPf39yMUCsFsNrMi7fF44Ha7s95H6XQafX19mJubQ1tbW9ZUDqGTJt/v3bsXo6PaygwLjaIU5LGxMfh8vqwSNpJ7aYWUvomVxRGUhFirSyaIiXE4oH9ihlhckQt3zBXj//rX3BfuS8UWuUbOJV94QSWAjEDORL04eLZUNK7ginHW8VUu5qmBiDGJh6RIp9MYHBzE1NQU1q9fr9l1lpSUoKqqirdGk0wmEQwG4ff7MTIygmAwk/O7XC54vV6YzWaMjIxgxYoV2Llzp+inWKGTnpqawuc+9zmYzWb88Ic/1PRYC42iFOS6ujr2Y1UuoalF/r+fLMEX/lP7JgoplKotCh0aMd7eZMZrA7mNLZSwlViyYgu1Lnl73SQAoGe2GhVO8ef+T08qby0n5NId04qxz+fD2bNnUVNTg46OjpxPAbFarSgvL+dlvSQn7u3tRSgUQklJCcbHx+Hz+XgVHkIDxDAMHnnkEXznO9/BPffcg2uvvbYoSt6AIhXkfD05esdAEeRcshxSUYWnPPfjyGkRxhVCd5wPV6wGLbGFFGIu+bbrMjXERIy57lgYV3DdsZ5SNzmEYvzQfWtkd7Alk0n09vYiGAxi06ZNeRltL4XP50NnZyfq6upQX1/PlquGQiEEAgHMzMxgYGAA8XgcDocDL774IkpLS/Hkk0+iuroaf/3rX1FdXb1oj3cxKEpBloNs8NCy/552t54elywVW7zybBcAwOEWf3M9ujd7qkf0DbG8+uqFAY5i+XEu4wqCmpyYEIlEAGSXOSnlyHpjC60umYixEmrcsRA17pgrxv/99Sr4/X50d3cjHA6zC23EdbpcLszMzKCnpwcNDQ1Yu3btorlMUs8cDoexdetW3gnDZDKxFR4rVmS2gzMMg3A4jMceewx/+ctfYDKZMDExgZtuugmPPvpo0bhjoEgFWe4JIgXu+RTkXEPEWCtPPLHQXS0SiuDSK1v0PiQA4u74xkvPwmw248yZzJvf6/XC5XLJfgROpVIYGBjAuXPnULK8Q/fjEsYW+XbJXHdMIO748b2TKHXwPw2pWcyTQ6zm+NGfLezM47pH7kLb5OQk5ubmYDKZsGzZMphMJgSDQcXnKRfMzMygq6sLjY2NWLduHZWYTk5O4o477oDX68XTTz/NZtOzs7NFJcZAkQqyHKSfhZY5YLSCzDAMvnGzGV/6b+mPoloX9yLBCM8lS8UVUZHKh0go8wZ+9ske3uXtb8nufZD9mKTdcc+xLjBpBk/9oR3AHiSTSQQCAfj9fgwMDCAUCsFisbAOjYg0AHbjwYoVK9jsUm+OrAW1Lpm449dGl8PjWLgddzGPK8ZaFvNo647/+MMmyWMQSkpKUFlZiVgshkgkgra2NlRUVLAiPTg4iGAwyKuG8Hq9cLvdORHpRCKBrq4uJBIJbN++HXa7XfE26XQaf/zjH/H9738fX//61/Gud72LJ8CVlflrKHW+eFMKslaXa7VaEY1KF+Nzi9pzhV53rEQsHMUrfznDuyzO6Sa//W0b2e/PHFy4Xpr0KWCFeAGr1YqKigpeO8RkMgm/38+WQgUCAXZjQX19PVtvKkW+YwstcMX46YNm6C2FVeOOf/11dYvW4XAYZ8+ehdPp5JWyVVZW8oQtlUqxJ9Ph4WG2GsLtdvM2gKj5hDk9PY2enh40NTWhtraWytWOj4/j9ttvR2VlJZ5//vmiFF8xTCrLwLTXjC0y3CZCXLq6ulBRUcGrm6SFu+2ai1CIya4iAPjif8m/yaRcssdjlRVj4pJpHTJxx0JiYf4JJi4yFpq7uwtYEONMNzB1JJNJ9PX1YX5+HmvWrIHJZILf74ff70c4HIbFYoF1WbvobYV9LYT1yEJBFmbj3NgCyG4qL7ZJRMwhv+3ChXIujyOFwyeSKCvLbAgq95pR4UlLumO5xTyuIAvd8X9+UZvak81Rk5OTWLdunaYdbalUCsFgkBXqYDCIdDqdJdLCeuV4PI7Ozk4wDIP169fLlotyH+8f/vAH/PjHP8Y3vvENXH311cUSS1D9EkXrkKUaDOl1yNzbygmxXv72xAmU2OVjFTVxhRhCMRZDTIy1CDHDMJiYmMDAwAAaGhrQ2trK/q247ieRSMDvn8NQYPGrM9TGFtyoAliIKx7fO6n6vrli3Hn4jOgnD7X4/X6cPXsWVVVVukrZLBYLysrKeHXJ6XQaoVAIfr8fk5OT6OnpQSqVgtPphMfjQSqVwtTUFFpaWlBTU0N1P2NjY/jsZz+L5cuX4/nnny+KhvNqKVpBliIXgszdJUR6W0gJ8Tc/ZpF1yWJZ8tEXMtFAPBqTFOVIMKKr3E1MjIXumNf3QIcr9vv96Orqgtvtxs6dO2VHYdlsNlRVVWEooBz7qNm1J4aWxT2uOwbAc8dchAt5gPxiXufhzHP+vS/b4XnfMni9Xs3VQKlUCr29vfD7/di4cWPWjrdcwM2aCQzDYG5uju2kaLVa0dvbi/HxcdZJe73eLKecTqfxu9/9Dj/96U/xrW99C1deeWWxuGLVFK0gy7XgzJRXqYfUIZP2gblowq2Vmnrx+ku5xTw5lMRYixDH43H09vYiHA5j3bp1vDevFpTacQpzZKVqCzH0bhR5+cVx3v/lFvNOvpLpW8wwaez73Q42GhDuZiPRAFlkkxPpmZkZdHd3o66ujvcpJN+QiTuDg4NobW1lKzxIyVogEMDc3BwGBwfZuuLnnnsObrcbjz32GJqbm/HCCy8UTZMgrRRthpxIJEQX16anpzE3N4e1a9eqOh7DMIjH4zh8+DBsNhv7Ec7r9aK0tFTyhX/u3Dn09vbi0ePSk5O5Dpm4Yy5iLlmPICu5Y64Y7/3NVtH7kYNhGIyMjGBkZASrV6/G8uXLVQuDVKVFvnNkQDpLFsuOAaCszIZyrxnPPjUAu7OU547F8uPjL5wEsCDEcnBFmlREANmLbKlUCl1dXUgmk1i/fj1VFUOuiEajOHPmDEpLS7F27VrF3sREpL/+9a/j+eefZwdHbNiwAQ8++OAiPepF582dIUuhZvI0wM+JzWYz9uzZg3g8zi5EjYyMIBaLweFwsC6mrKwMsVgMXV1dKCkpwdatW/Hocen7ILGFmBgD8tGFElrcMQB85daMaJ8+fZrnzpQ+EZCPrJWVldi1a5fmAZi52EYtBk1NspRLFoMbV9id/OdIrxgD0vktEemxsTHMzs4iFouhrKwMNTU1iEajsNlseRs+SiAd4UZGRrB27VrqSojR0VF8+tOfRlNTE/72t7+hrKwMDMNgZoauF3UxU7SCLOXIaCZPA/ILdqWlpVi2bBlbqcEwDKLRKHw+H6anp3Hq1CmkUimUlZXB4/G8EZHI9/o99JcTsFCOMlLjjoUoVVUkYnHWFXNLoIaGhtg6VSLQpJ7YZDIhGo2iu7sbyWQSmzZtkh2HRctDzy58//5Lxa+jVP6mtreFFJkGQhm47hgAzx1LceKlU2yjJaVua0qQ58Bms2F6ehqVlZVYs2YNYrEYK9K0lRBaCYfDOHPmDNsRjkb80+k0fv3rX+PnP/857r33Xrz97W9n31Mmk6notkFroWgFWQolh6xmwY5gMplQUlKCSCQCn8+H9evXY9myZezUhYmJCVy7tRv/+7r4qvmpA52Kj1uLS6Zxx1we+68NvP9bLJashjDcTR99fX0IhUJIpVJIJpNYuXIl1qyR752glQVxjiEazpxQ3315bhar5Bb3Oo9knpsLL7iAvezZl4LwltlF3bHYYt6pA5mqCb1CTGAYBkNDQxgfH8e6devYagTSLJ7ArYSYmJhAd3c3K9LcbdRqRJphGAwPD2NsbAzr16+nznyHhobw6U9/GmvWrMFLL72kez2hWCnaDJmIhNjlhw8fxp49e7J+xjAMb8GOJvfklnOtWLGCHW8jhli1hVCM5VwyEWQxh6wlO45HYlkirAYyrbu6uhrl5eWsUIfDYZSUlPCctN1u17TA9KVfZMcWRJC5hINRXHlFLQDlHBlQzpLPHOpE6o1G7jd+ekGMPY5UliAf3T+UJcglJRacOpCJoHIpxoFAAGfOnEFlZSVWr16tOpbgijTJpdPpNNsGkwi1mEiHQiGcPn0a5eXlaG5upnbFv/rVr/Df//3f+O53v4tLL7100RYao9EoLrroIsRiMSSTSVx33XW45557FuW+RTAyZDHI1A8uWuuJ5+fn0d3dDY/Hg/b2dsXCd2EJnJgzTsWTkqIcj8ZQ31Kn+LgAZXf80I+aqY4jRjgcRldXF8xmM7Zt28YuIHE/cpKPz+QjdDQahd1u54m0lu3rAGB32kRF+cl9E+z3kWAUF1+e2RJOG1ucOSQ4OVotrCgTiBgTxMQYACvGWhZFxUilUuyGGj2lbNxytbq6zGuJiHQgEMDU1BR6e3uRSqXYQacejwdzc3OYmZnBhg0bqOfXDQ4O4rbbbsP69evx8ssv56X8To7S0lK2kiORSOCtb30rrrzySlEzVigUrSBLCSr3cq1CHIlE2FrLjRs3ampZKBdTyImyVmLhqC4RBjKi0N/fj5mZGbS2tsou4ojl7ESkfT4fO5ONLIaSvJ1mNxctf3u6n/1erBGPcKqGxWZDSrC+wHXHh44uTLUWqz0mdL+a2WH503u8mJmZYfNerczOzqKrqwsrV66UbN6uB65Ir1yZ6QxIBp1OTU3h5MmTMJvNsFqtGBgYYE+oZBq1kHQ6jV/84hf41a9+he9///u4+OKLz0tdMekcB2SqrhKJRMHXNxetICuRSqVUC3EikcDAwABmZ2fR0tKiaWr1Nz9mwTU3nVZ9Ozmktkn/z7dWil1dNQzDYGpqCn19fairq9O064s77ofs3GIYBpFIBH6/HzMzM+jv70cikWA/Pnu9Xnz1Bi/u/rXyfTnddoQ5zXccbjuvGY/D7aCayKyEkjvufrULT/x6C7t+cO7cOfT39yOZTMLpdCqKGRfSkCcej/M+iSwWk5OTmJmZwY4dO+DxeNhexWQaNXHSTqcTNpsNXV1daGhowN133422tja8/PLLi9pfWYxUKoX29nb09PTg1ltvxe7dytPNzydFmyGn0+msagqyYHfkyBHY7Xa2nEip7WA6nWbLexobG7Fy5UrdZ1oaURa6ZKm4IhqO42PvWFiwIfXRHo9H98aVYDCIzs5OOBwOtLS05NTBikFqVH0+H+bn5zE9PY2net4mel1hbBHO6hWcXW+tNHsOAOuSb/jULvYy4o5JdvzSM51wuB08Qf7h7dKLmeT3IjGO3+/nxQJEqK1WKxiGweTkJPr7+zXXceuBTA9Zvny57JoI+b1CoRD6+/tx99134/jx43C5XNixYwc+9KEP4b3vfe+iPW455ufnce211+LHP/4xNm3adD4ewps7Qxa+gLkLdtu2bUMwGITP52PbDlosFvajc1lZGetGyMaO6upq2YGPavnzLzYqijI3ugjPB3g/6zpyltPrwAVgF1uf6vP52J1eJpOJfcOTkw/tp4G+vj74/X6sXbt20ab6mkwmOJ1OzM3NsRUrT/Uo3w5QdslilNhLFaOLF146B7vDxnPHasSY/F4ulwsul4vXeJ04TpLdJhIJJJNJlJaWoqWlBRUVFYsmxiSn9vl81NNDTCYTpqamcNddd2Hr1q3405/+BIfDwbbaLBTKy8tx8cUXY9++fedLkKkoWodMdtbR5sSZpjZ+NuMMhUJs3+RVq1ahuro6L+6QxinHwnxXp6bpTCqV4v1e4XAYVquVt4mFWwHBMAzGxsYwNDSEVatWYcWKFYvqzvx+Pzo7O1FeXo7Vq1ezJ0CxagsgNy4ZyHbK/3TzdgALYgwsxBU9pzPbo4kga+3ExoWUk42OjqKxsZHXBY9bT0w++eR608f8/DzOnj2LlStXoqGhgeo5T6VS+PnPf47f/e53+MEPfoCLLroop49JL9PT07DZbCgvL0ckEsHll1+OO++8E+985zvPx8N5czvkQCAAn8+H8vJyVoSVJolUVVXB7XYjEokgkUhg7dq17CDGsbExNt8kLjoXbwwlp8wVYy3dvywWS1ZvYu5Ow4mJCUQiEZSWlqK0tJT9myk1Aco1iUSCHeuzYcOGnK3I07hkKV546Rz7PRHjE4f6eO44F2IcDAZx5swZlJeX83Y3chfYiJMeHx9HV1dXzkSajFMKhUJZ45Tk6Onpwac//Wm0t7fjpZdeyslGoFwzPj6OG264gV0v+sAHPnC+xJiaonXIhw4dwuc+9zn2Y297ezs6OjokX3SpVIrtG7t69WrU1NSIxh7kjeHz+RAIBMAwDDweDy+P1uIohaKsV4jVEIvF0NnZiVAohLKyMkQiEcTjcXYRipx88iHQ3KY0cg3MaR0yoN8lN65vYC/jumMixkDGHesVY1K1Mjs7iw0bNqjaLMHdPk16FDMMo6kRUX19Perq6qhd8X/8x3/ggQcewI9+9CO89a1vpX7MehkeHsb111+PiYkJmM1mfPzjH8dnP/vZRbt/nVCJQtEKMiGRSODUqVM4cOAADh8+jGPHjsFsNmP79u3YsWMHduzYgZdeegnLly/Hjh070NDQoGohjLu9mEQdJBIgi2tymyLC4TC6u7vxrz9aELvFEuN0Oo2RkRGMjo6iubmZdxKSWoTK5UfnQCCAzs5OeDweNDc3Kwq+1tgCkB8OyiUejSkKci7EeG5uDp2dnexmolzEQkKRJo2IuLvySCOi7u5utqEPbfVGV1cXPvOZz2DXrl342te+lpcdmXKMj49jfHwcO3bsQCAQQHt7Ox599FFs3LhR+cbnH0OQxWAYBsFgEEePHsUDDzyAhx9+GPX19aiqqsKOHTvQ3t6OXbt26VrZTiQS8Pl8rEiTTRHcDnEmk4l1R6Sm95qbTrNinG9XPDs7i+7ublRXV6OpqYl611UoFGJ/N+4bnvxeNIMyyeh5v9+P9evXUzvDxXDJtU0LzdSl3PH9X6NruC5GIpFAd3c3otEoNmzYkHdR43aL8/v9mJ+fRzQaRVlZGWpra6maRiWTSdx333146KGH8OMf/xhvectb8vqYaXn3u9+N2267DZdddtn5fig0GIIsRywWwyc+8Ql88YtfxNq1azE+Po5Dhw6xTppMO2hvb8fOnTuxfft2uN1uTSJNmg8RgZ6enkY0GoXb7UZtbW3O8mgaotEourq6wDAM1q5dq1sQxD4hkIoV8inB4XCw/anJNnOt5YO5dMmZy/iiLCbIg52Zqd0OtwN3XDfO222oJsaZnJxEX1+fqtlyuSIej6OrqwupVAqtra3sFGoSd3CrcbxeL5xOJywWC86ePYvPfOYzuPDCC3HPPfcsei20FAMDA7joootw8uRJ6p2D5xlDkPWQSqXQ2dmJgwcP4uDBg3jttdeQSCSwZcsWVqQ3btyo6g1Jtlp7vV40NTWxi2skjyZvCq7bzNWbNp1OY3BwEJOTk2htbdW0qYUWbsUKd1ZeLBaDy+XC2rVrNS/a5dMlK7njX311mWiM43Q6ebXfwtLIaDSKzs5OWCwWrF27Nu+13ELIiaC5uRnLl4sPR+WeWP1+P77yla+gt7cX8/P/f3tnH9ZU/f7x95kTYoFiKKFOUWEDGwLyUPRMfn3ItKy0JDXzItMeRM00SdIvWuplWj/yKVNTNK9K5KeZ5Y8yLyWtYKKSIBsP5hQURCAYMMbGdn5/2Dme8bjBYWfA53Vduy4H45zPhPM+9+7Pfb/vSsyfPx8vv/wyFAqFYAMZuNTU1ODJJ59EXFycw9Q5WwERZL7R6XS4ePEilEollEolcnJyWB+LsLAwhIeHQyqVNvmj5VpTyuXyFus7mYuiqqrKokSNudi59dG2wHRVeXl5tVnozzcNDQ1su7WXlxc7fZppm2bem7XRZkcEGWhdlFuKjl1cXVpMU3A3epsrU9Pr9SgvL4dcLu/Um2Bz1NfXQ61W23wjUKlUiImJwSOPPIKJEyciKysLFy5cwO7du+1+M2mM0WjE5MmTMWHCBCxZskTQtdgIEeTOhjHVViqVSE9Ph1KpRGFhIYYOHYrw8HAoFAqcPHkSjz76KCIjI9vl98qNorVaLfR6vdVCVltbi7y8PPTu3Ru+vr52/bjJbbeWSqWQSqVNfESYtmnmvTU0NLBC1loah++0RXHBdfhHKNjnjVMVB//H24p3fBez2Yzbt2+joKAAIpGILbnkpgSsMftvL9zUkK+vr9UT1hsaGvD555/jhx9+wPbt2xEeHt4p62svNE3jtddew3333YeEhAShl2MrRJCFwGw248qVK9i8eTO+++47yGQytrY2LCwMYWFhCAwMbLfTGdcMnxEypvqBEWkXFxdcu3aNHVVl7zlltbW1yM3NhbOzM2QymdVRVWNrSK1WCwBNhOzDvc3/fHui5MZiDNwR5Py/rsLpHud2iTHzicDf35/NbzKba8zvrDWz/47AHackk8msTqnl5OQgJiYGY8aMwapVq9r999mZnD17Fo8//jhGjRrF3szWrVuHZ555RuCVWQURZKHQ6/VYs2YNlixZgv79+8NgMODSpUtsPjorKwtOTk4YPXo0K9K+vr7tjpgYIausrMStW7dQVVUFZ2dneHh4sJUdEomk0zeRTCYTNBoNysrK4Ofnx8uNoDkh++Hyg82+1lpBvnrpbi82bTY3iY7bK8aVlZXIzc21ygMCsDT712q1TTZEmc01a325b9y4gcLCQpvSI0ajEQkJCfjpp5+wfft2hIW1PPuRb6Kjo/Hjjz/C09MT2dnZdjuvQBBBdlRomoZWq8W5c+fYVMeVK1cwcOBANh8dFhaGAQMGWC2i1dXVyMvLg0QigY+PD0QiEZuPZi52Jycni3w0n1EQk6ceNGhQs3l0PmloaGjRAa6xKKvSVTCbWvZC9nvQ0qC/MK/IZjFmut10Oh38/f071LXW3IZoW2b/dXV1UKlUkEgk8PX1tdpvJTs7GwsXLsT48eMRFxdn96j4t99+g6urK2bPnk0EmXkREWTHgJnUnJaWxm4aVlRUQC6XswIdHBzcJGIyGo24cuUKampqIJfLWy0B4voRMxtr3G68liZFtEZdXZ1FBYG9LurW8siq9OaHxTYnzFxBZqLjI19YP5GcMQXqTN8Pg8HA/s6YfQRmXJPBYEBlZSVGjhxp0R7fGkajEZ999hlSUlLwxRdfICSk7WGrnYVGo8HkyZOJIDMvIoLsuDQ0NEClUrG10RcvXgRN0wgKCkJISAg0Gg3EYjHmzp3brrpWZmONe7GbTCYLd7iWNp/MZjM0Gg1KS0ttmjjMF40F+a8zly2emxtajooZYW4uOrZWjJl2c4qi4OfnZ9fqA5qm8c8//0CtVkMsFqNXr14wGAwWk8/79OnT7JqysrKwcOFCTJw4EStWrBC8aoIIcqMXEUHuOjAlVvv378cnn3wCDw8PmM1m9OnTx6L0riN+zVwLT6Ybr3Gjh06nQ0FBgSBldNzqjY+/bL2WuS1R5grysmnlrd6AuOdncrUymczuk5LNZjPrueLv78/aonKrVpgHY4aVk5MDZ2dnZGZm4syZM9ixYweCg/mZ8ddRiCA3ehER5K7Hjh07EBkZCX9/f1agmA3Dc+fOobi4GMOHD2cNlUaPHs22a7cHpna4vLwcxcXFbBTt7u7ObhraI9Kqq6uDWq2Gk5MTW70xaU5Wqz/TkijLQu9Gwh9F383bVldXt1j9UFtbC7VaDVdXV/j4+PDmjW0tjCscM+C0rRsh40eyd+9eJCcno7S0FO7u7ggICMDGjRtZX2YhIYLc6EVEkLsfZrMZ+fn5bD76woUL0Ov1CAgIYEVaoVDYVI52/fp1lJSUwNfXF/3792dbwZmctMFgYEcvMTXEfAkWt8uQO/aeoT2izAjy5nebbsAxNyBu9YPJZILJZMLQoUPh5eXV7ina7YFJD5WVldnkCldfX4+NGzfi1KlT+PLLLxEYGMimwWQymUO0QRNBbvQiIsg9g/r6emRmZrL56OzsbEgkEoSEhLCbhsOGDWsSdTEmRAMGDGj2+wzc0UuMkDF2kNaOymoOppSsrfPbKspiJzGO7Wl7cgQzzsjDwwN9+vRhy9QaT9HurE8JWq0WarUaAwYMgLe3t9X/f5mZmVi0aBGef/55vP/++3b1traWV155BadPn0ZZWRnuv/9+rF69Gq+//rrQy+osiCBzWblyJY4ePQqRSARPT08kJiayBuA9EWZj6Ny5c6xIazQaSKVShIWFwcfHB99//z3eeecdhIaGtsuEyGw2WxgPtTQqq6UJLowrmrWlZNaK8v8daDt/yjjS1dTUwN/fv0m7O9cwinkwHtLcLsr2fkpgxikxFRTWen/U19djw4YNbK541KhR7Tp/e0hJScGiRYtgMpkwd+5cxMbG2u3cXQAiyFy0Wi1bErZ582bk5ORgx44dAq/KsWC6DNeuXYvjx49DoVCgoqLCwuA/MDCwQw5xjUdl1dXVsZEmk+qoqKiARqOxecBnS4LMjY6tEeOysjIUFBRgyJAhNm2QNvcpoT2DZ5lxSrZ6JV+4cAGLFy/G1KlTsXTpUrtGxSaTCXK5HCdOnIBUKkV4eDi+/fbbruJVbA969ginxnDrc2tra+1qfdhVEIlE8PDwgI+PDzQaDSQSCYxGI7Kzs5GWlob9+/fj0qVL6NWrF2vwHx4eDplMZrV1KDMqi+kko2ka9fX1qKqqQmlpKbKyskBRFPr168d+3Vpr0p8SRzURZVuiYoPBgNzcXNA0jdGjR9tcU80dZModv8T4Ebc1eNZkMqGgoAA1NTUIDAy0usFEr9dj/fr1+PPPP7Fv3z4oFIq2f4hnlEolfH19MWLECABAVFQU8TgJgwAADDNJREFUjh49SgTZRnpMhAwAcXFx2L9/P/r27YtTp05ZbbpCuAtN06iursb58+fZVAeTY+aW3tkS2TZuue7bt2+ro7IYT4uWjj9pTpZNUTF3jJQtZjzthTt4ltk0ZG5Mnp6e8Pb2trplOiMjA++++y6mT5+OJUuW2L3ygyE5ORkpKSnYvXs3AODrr79Geno6tm7dKsh6HJCel7IYO3YsSkpKmnx97dq1mDJlCvt8/fr10Ov1WL16tT2X121hJlVzDf5v374NmUyG0NBQhIaGIiQkpFnznIqKCuTl5bVZ02zrqKyJszKtiop1Oh3UarXNbcd80dDQgPz8fNTW1mLQoEFsXpoZPMt9f9yIXa/XY926dUhPT8fOnTsxcuTIVs7S+Rw6dAg///yzhSArlUps2bJF0HU5ED1PkK3l2rVrmDRpEm+lNsuWLcOxY8fg5OQEHx8f7N271+4Oa46GyWSCWq1mvTouXLgAk8nEGvwPHz4cSUlJeP3116FQKNqVl2by0YzzXXOjslrKo3IbLPgyQrKVsrIy5Ofnt9h23Vxp4a5duyCRSHDmzBnMnj0bH3zwgWBRMZc///wT8fHx+PnnnwHcCXoA4IMPPhByWY4EEWQu+fn5kMlkAIAtW7YgNTUVycnJvBz7l19+wZgxYyAWi7F8+XIAwIYNG3g5dndCp9MhIyMDW7duxcmTJzFy5EhQFGWR6hg8eHC7O/8aj8piPJbvvfdei001psHDw8PDqgYLvjEajcjLy4PRaMTIkSOtzlXrdDp8+OGHyMnJwfDhw/H333+jvr4ef/zxh+CizAxfOHnyJAYPHozw8HB88803guSzHRSyqcclNjYWubm5EIlE8Pb25rXCYvz48ey/IyIieBP67oZEIoFUKsWQIUOg0Wjg6uqKsrIy1uD/wIEDKCoqgre3N1sbHRoair59+1qVT6UoCi4uLnBxcWFHFXE9lm/cuIGysjKYTCb0798fLi4u0Ol0vI7KagvGjMjWCpK0tDQsXboUs2bNwrZt29hNTpPJZJdZjG0hFouxdetWTJgwASaTCdHR0USM20GPiZDtxbPPPovp06dj1qxZQi+lS8KU3jGpjoyMDOh0OjzwwAOsSI8aNcrmCojy8nLk5+dDKpXCy8uL9etoaVSWs7MzryJtMBigVqttNiPS6XT46KOPkJmZiV27dkEut96JrquRmZmJt956C1qtFr169UJcXBymT58u9LL4gqQs+MSaDcO1a9ciIyMDhw8fJmV1PGIwGPDXX3+xfh3Z2dlwdna2MPhnPKCb+1lm2rKfn1+L7cIdGZXVGjRN49atW7h69Sp8fHzg6dn8bL7m+OOPP7Bs2TK89tpriImJESwSPnToEOLj46FSqaBUKjvNxD4vLw8URUEmk+HmzZsIDQ2FSqXqLvsxRJDtyb59+7Bjxw6cPHmyQwbljbHXxdCVoGkaVVVVFgb/f//9NwYNGsTWRoeEhODo0aMYPnw4AgMDW5y23No52hqV1VaTh16vh1qtRu/evSGXy60W9NraWqxZswbZ2dnYuXMnu/chFCqVCiKRCPPnz8emTZt4+Rtcvnw5vL298fbbbwMA4uPj4ebmhvfee499TVBQEJKTkwV//zxBcsj2IiUlBRs2bEBqaiqvYgwAAQEBOHz4MObPn8/rcbsyFEXB3d0d48aNw7hx4wDcEdDr168jPT0dKSkpmD9/PqRSKXx9fS0M/l1cXGzOR3t5eQG4m4+uqqqyaPLg+lkwv/+bN2/i+vXrNo1Tomkav//+O5YvX47o6GgkJCQ4RH64M0rqoqKisHjxYlaQk5KSkJKSwn5fqVTCYDDAx8eH93M7MkSQeWDBggWor69nxSEiIoK3TUOh60u7ChRFwdvbG4MHD0ZiYiIOHz6MRx55BJcvX0Z6ejoOHjyI2NhYUBSFoKAgVqT9/PysFj2RSAQ3Nze4ublBKpUCuDsXr6qqivW+MBgMuOeeezBs2DCrPShqa2sRHx8PtVqN5OTkbi9Eo0ePRmlpKW7evInbt2+jX79+GDp0KACguLgYr776Kvbt22f3ChihIYLMAwUFBW2/iGAXxGIxjh8/zj4PCgpCUFAQ5s2bxxr8Z2RkQKlUYsOGDcjNzcV9991nUXpnyygmsViMfv36wd3dHUVFReyEcZFIhKqqKhQXF7c6KoumaZw5cwaxsbF44403sGXLFkFEyNqmKj6ZNm0akpOTUVJSgqioKAB3PGcmTZqEjz/+GBEREZ1yXkeGCLIDIMTF0BOhKAqurq6IjIxEZGQkgLubbsyG4Z49e1BSUoIRI0ZYGPy7ubm1KNI6nQ4qlQpubm4IDw9nI26mBZs7KosZBpueno7U1FQYjUZUVlYiKSlJ0AqKX3/91e7njIqKwhtvvIGysjKkpqbCYDDghRdewOzZs/HSSy/ZfT2OABFkB0CIi4FYJd6Boih4eXlhypQp7M3PbDYjLy8PaWlpOHbsGFavXg2DwdDE4J+iKKSmpsLV1bXVbj+KoiCRSCCRSDBw4EDQNI3KykocOXIEI0aMwKBBgzBjxgzMmTMHCxYssOfbFxSFQoHq6moMHjwYAwcOxIEDB/Dbb7+hvLwciYmJAIDExESHGTdlD0iVRRchMjKStx1uYpVoO3q93sLg//z589BqtQgNDcW0adMQFhZmlYF8dXU1Vq5cCY1Gg507d2LYsGHs92iadshyySNHjiAmJga3b9+Gu7s7goOD2RZpgtWQsrfuQGdcDMR3oGOcOHECq1atwrp161BfX8+K9LVr1zBkyBCLLsN+/fqBoijQNI3Tp09jxYoVeOeddzB37twet2HVwyGCTGgeYpXYMerq6iAWi5vUFTOz75hZhhkZGaiuroZcLkdpaSlcXFywc+dOtppACIgRlmBYJcjkFt0Dae4m7IgflR0VFxeXZps8RCIRRowYgRkzZiAhIQFnz55FRkYGYmNj8dRTT+H48eOCijEAjBs3DtnZ2bh06RLkcjn76YjgGBBB7oFIpVIUFhayz4uKinidLxgdHQ1PT08EBLQ9RLS707t3b4SGhiI+Pt4hUhTjx49nS+4iIiJQVFQk8IoIXIT/CyHYnfDwcOTn5+Pq1aswGAz47rvv8Nxzz/F2/Dlz5lh0XREckz179mDixIlCL4PAgZS99UA62yrxiSeegEaj4e14BNuw1ghLLBZj5syZ9l4eoRXIph6hU9BoNJg8eTJvU1kI/NFZRliEViHmQgQCwZLONMIidBySQyYQehALFixAdXU1xo0bh+DgYLz55ptCL4nAgUTI3ZSnn34aaWlpeOyxx/Djjz8KvRxeKSwsxOzZs1FSUgKRSIR58+Zh0aJFQi+rS0CMsBwbEiF3U5YtW4avv/5akHO/8sorePjhh5GbmwupVIqvvvqK1+OLxWJ8+umnUKlUSEtLw7Zt25CTk8PrOboCK1euRGBgIIKDgzF+/HjcvHlT6CUROgjZ1OvitDZ54fTp09i0aVO3i5AbM2XKFCxYsID1o+4paLVa9OnTBwCwefNm5OTk8Dq8l8ArpFOvJxAVFYWDBw+yz5OSknqUdaFGo8HFixfx0EMPCb0Uu8OIMXDH4J50W3Z9SA65i9Pa5IXuTk1NDaZOnYqEhAQLcepJxMXFYf/+/ejbty9OnTol9HIIHYREyN0AZvLCwYMH2ckL3R2j0YipU6di5syZePHFF3k9tl6vx4MPPoigoCAoFAr897//5fX4tjB27FgEBAQ0eRw9ehTAnQaPwsJCzJw5k5hDdQNszSETHBCKohQAdgHoD+BJmqaL//16JIClNE1PFnB5vEPd+Wy+D0AFTdOLO+n499I0XUNRVG8AZwEsomk6je9z8QVFUd4AfqJpmhiIdGFIhNwNoGn6MgA3ADc4YnwGwCEA/6EoqoiiqAlCrpFnHgXwKoAxFEVl/vt4hq+D03eo+fdp738fDhe5UBQl4zx9DoBaqLUQ+IFEyARCM1AU1QvAeQC+ALbRNL1c4CU1gaKo/wXgB8AM4BqAN2maviHsqggdgQgygdAKFEW5AzgCIIamaWLMQehUSMqCQGgFmqYrAZwG8LTASyH0AIggEwiNoChqwL+RMSiKcgEwFiQ/S7ADpA6ZQGjKQAD7/s0jiwAk0TTdvdsdCQ4BySETCASCg0BSFgQCgeAgEEEmEAgEB4EIMoFAIDgI/w+9FHngFICSMgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "from matplotlib import cm\n",
    "from matplotlib.ticker import MaxNLocator\n",
    "\n",
    "fig = plt.figure(figsize = (6, 4))\n",
    "ax = fig.gca(projection='3d')\n",
    "\n",
    "X = np.linspace(-3., 3., 20)\n",
    "Y = np.linspace(-3., 3., 20)\n",
    "xx, yy = np.meshgrid(X, Y)\n",
    "Z = np.array([[cost([x, y]) for x in X] for y in Y]).reshape(len(Y), len(X))\n",
    "surf = ax.plot_surface(xx, yy, Z, cmap=cm.coolwarm, antialiased=False)\n",
    "\n",
    "ax.set_xlabel(\"v1\")\n",
    "ax.set_ylabel(\"v2\")\n",
    "ax.zaxis.set_major_locator(MaxNLocator(nbins = 5, prune = 'lower'))\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We create a GradientDescentOptimizer and use it to optimize the cost function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after step     1:  0.1737355 | Variables: [ 0.34699, 2.49206]\n",
      "Cost after step     2:  0.1675543 | Variables: [ 0.40033, 2.48402]\n",
      "Cost after step     3:  0.1598003 | Variables: [ 0.46035, 2.47592]\n",
      "Cost after step     4:  0.1502869 | Variables: [ 0.52718, 2.46780]\n",
      "Cost after step     5:  0.1389376 | Variables: [ 0.60056, 2.45973]\n",
      "Cost after step     6:  0.1258558 | Variables: [ 0.67982, 2.45179]\n",
      "Cost after step     7:  0.1113782 | Variables: [ 0.76374, 2.44405]\n",
      "Cost after step     8:  0.0960798 | Variables: [ 0.85059, 2.43661]\n",
      "Cost after step     9:  0.0807058 | Variables: [ 0.93826, 2.42956]\n",
      "Cost after step    10:  0.0660363 | Variables: [ 1.02448, 2.42297]\n",
      "Cost after step    11:  0.0527307 | Variables: [ 1.10710, 2.41691]\n",
      "Cost after step    12:  0.0412146 | Variables: [ 1.18438, 2.41141]\n",
      "Cost after step    13:  0.0316476 | Variables: [ 1.25514, 2.40648]\n",
      "Cost after step    14:  0.0239656 | Variables: [ 1.31877, 2.40210]\n",
      "Cost after step    15:  0.0179609 | Variables: [ 1.37518, 2.39825]\n",
      "Cost after step    16:  0.0133618 | Variables: [ 1.42465, 2.39489]\n",
      "Cost after step    17:  0.0098911 | Variables: [ 1.46768, 2.39196]\n",
      "Cost after step    18:  0.0072989 | Variables: [ 1.50490, 2.38943]\n",
      "Cost after step    19:  0.0053763 | Variables: [ 1.53698, 2.38724]\n",
      "Cost after step    20:  0.0039566 | Variables: [ 1.56455, 2.38535]\n"
     ]
    }
   ],
   "source": [
    "opt = GradientDescentOptimizer(0.5)\n",
    "\n",
    "var = [0.3, 2.5]\n",
    "var_gd = [var]\n",
    "for it in range(20):\n",
    "    var = opt.step(cost, var)\n",
    "    var_gd.append(var)\n",
    "\n",
    "    print('Cost after step {:5d}: {: .7f} | Variables: [{: .5f},{: .5f}]'\n",
    "          .format(it+1, cost(var), var[0], var[1]) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can plot the path that the variables took during gradient descent. To make the plot more clear, we will shorten the range for $v_2$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize = (6, 4))\n",
    "ax = fig.gca(projection='3d')\n",
    "\n",
    "X = np.linspace(-3, np.pi/2, 20)\n",
    "Y = np.linspace(-3, 3, 20)\n",
    "xx, yy = np.meshgrid(X, Y)\n",
    "Z = np.array([[cost([x, y]) for x in X] for y in Y]).reshape(len(Y), len(X))\n",
    "surf = ax.plot_surface(xx, yy, Z, cmap=cm.coolwarm, antialiased=False)\n",
    "\n",
    "path_z = [cost(var)+1e-8 for var in var_gd]\n",
    "path_x = [v[0] for v in var_gd]\n",
    "path_y = [v[1] for v in var_gd]\n",
    "ax.plot(path_x, path_y, path_z, c='green', marker='.', label=\"graddesc\")\n",
    "\n",
    "ax.set_xlabel(\"v1\")\n",
    "ax.set_ylabel(\"v2\")\n",
    "ax.zaxis.set_major_locator(MaxNLocator(nbins = 5, prune = 'lower'))\n",
    "\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Optimizing the Hamiltonian coefficients"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Instead of optimizing the circuit parameters, we can also use a fixed circuit,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ansatz():\n",
    "\n",
    "    qml.Rot(0.3, 1.8, 5.4, wires=1)\n",
    "    qml.RX(-0.5, wires=0)\n",
    "    qml.RY( 0.5, wires=1)\n",
    "    qml.CNOT(wires=[0, 1])\n",
    "    \n",
    "    \n",
    "@qml.qnode(dev)\n",
    "def circuit_X():\n",
    "    ansatz()\n",
    "    return qml.expval.PauliX(1)\n",
    "\n",
    "\n",
    "@qml.qnode(dev)\n",
    "def circuit_Y():\n",
    "    ansatz()\n",
    "    return qml.expval.PauliY(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "and make the classical coefficients that appear in the Hamiltonian the trainable variables."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cost(var):\n",
    "\n",
    "    expX = circuit_X()\n",
    "    expY = circuit_Y()\n",
    "\n",
    "    return (var[0] * expX + var[1] * expY) ** 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after step     1:  0.3269168 | Variables: [ 0.95937, 1.49547]\n",
      "Cost after step     2:  0.0461959 | Variables: [ 1.20723, 1.11786]\n",
      "Cost after step     3:  0.0065278 | Variables: [ 1.30040, 0.97591]\n",
      "Cost after step     4:  0.0009224 | Variables: [ 1.33543, 0.92255]\n",
      "Cost after step     5:  0.0001303 | Variables: [ 1.34859, 0.90250]\n",
      "Cost after step     6:  0.0000184 | Variables: [ 1.35354, 0.89496]\n",
      "Cost after step     7:  0.0000026 | Variables: [ 1.35540, 0.89212]\n",
      "Cost after step     8:  0.0000004 | Variables: [ 1.35610, 0.89106]\n",
      "Cost after step     9:  0.0000001 | Variables: [ 1.35636, 0.89066]\n",
      "Cost after step    10:  0.0000000 | Variables: [ 1.35646, 0.89051]\n",
      "Cost after step    11:  0.0000000 | Variables: [ 1.35650, 0.89045]\n",
      "Cost after step    12:  0.0000000 | Variables: [ 1.35651, 0.89043]\n",
      "Cost after step    13:  0.0000000 | Variables: [ 1.35652, 0.89042]\n",
      "Cost after step    14:  0.0000000 | Variables: [ 1.35652, 0.89042]\n",
      "Cost after step    15:  0.0000000 | Variables: [ 1.35652, 0.89042]\n",
      "Cost after step    16:  0.0000000 | Variables: [ 1.35652, 0.89042]\n",
      "Cost after step    17:  0.0000000 | Variables: [ 1.35652, 0.89041]\n",
      "Cost after step    18:  0.0000000 | Variables: [ 1.35652, 0.89041]\n",
      "Cost after step    19:  0.0000000 | Variables: [ 1.35652, 0.89041]\n",
      "Cost after step    20:  0.0000000 | Variables: [ 1.35652, 0.89041]\n"
     ]
    }
   ],
   "source": [
    "opt = GradientDescentOptimizer(0.5)\n",
    "\n",
    "var = [0.3, 2.5]\n",
    "var_gd = [var]\n",
    "for it in range(20):\n",
    "    var = opt.step(cost, var)\n",
    "    var_gd.append(var)\n",
    "\n",
    "    print('Cost after step {:5d}: {: .7f} | Variables: [{: .5f},{: .5f}]'\n",
    "          .format(it+1, cost(var), var[0], var[1]) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The landscape has a quadratic shape."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize = (6, 4))\n",
    "ax = fig.gca(projection='3d')\n",
    "\n",
    "X = np.linspace(-3, np.pi/2, 20)\n",
    "Y = np.linspace(-3, 3, 20)\n",
    "xx, yy = np.meshgrid(X, Y)\n",
    "Z = np.array([[cost([x, y]) for x in X] for y in Y]).reshape(len(Y), len(X))\n",
    "surf = ax.plot_surface(xx, yy, Z, cmap=cm.coolwarm, antialiased=False)\n",
    "\n",
    "path_z = [cost(var)+1e-8 for var in var_gd]\n",
    "path_x = [v[0] for v in var_gd]\n",
    "path_y = [v[1] for v in var_gd]\n",
    "ax.plot(path_x, path_y, path_z, c='pink', marker='.', label=\"graddesc\")\n",
    "\n",
    "ax.set_xlabel(\"v1\")\n",
    "ax.set_ylabel(\"v2\")\n",
    "ax.zaxis.set_major_locator(MaxNLocator(nbins = 5, prune = 'lower'))\n",
    "\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Optimizing classical and quantum parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we can optimize *classical* and *quantum* weights together by combining the two approaches from above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after step     1:  0.1978826\n",
      "Cost after step     2:  0.0008013\n",
      "Cost after step     3:  0.0000028\n",
      "Cost after step     4:  0.0000000\n",
      "Cost after step     5:  0.0000000\n",
      "Cost after step     6:  0.0000000\n",
      "Cost after step     7:  0.0000000\n",
      "Cost after step     8:  0.0000000\n",
      "Cost after step     9:  0.0000000\n",
      "Cost after step    10:  0.0000000\n"
     ]
    }
   ],
   "source": [
    "def ansatz(var):\n",
    "\n",
    "    qml.Rot(0.3, 1.8, 5.4, wires=1)\n",
    "    qml.RX(var[0], wires=0)\n",
    "    qml.RY(var[1], wires=1)\n",
    "    qml.CNOT([0, 1])\n",
    "\n",
    "\n",
    "@qml.qnode(dev)\n",
    "def circuit_X(var):\n",
    "    ansatz(var)\n",
    "    return qml.expval.PauliX(1)\n",
    "\n",
    "\n",
    "@qml.qnode(dev)\n",
    "def circuit_Y(var):\n",
    "    ansatz(var)\n",
    "    return qml.expval.PauliY(1)\n",
    "\n",
    "\n",
    "def cost(var):\n",
    "\n",
    "    expX = circuit_X(var)\n",
    "    expY = circuit_Y(var)\n",
    "\n",
    "    return (var[2] * expX + var[3] * expY) ** 2\n",
    "\n",
    "\n",
    "opt = GradientDescentOptimizer(0.5)\n",
    "\n",
    "var = [0.3, 2.5, 0.3, 2.5]\n",
    "\n",
    "for it in range(10):\n",
    "    var = opt.step(cost, var)\n",
    "    \n",
    "    print('Cost after step {:5d}: {: 0.7f}'.format(it+1, cost(var)))\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
